home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MYUTIL / CMPPART.M < prev    next >
Encoding:
Text File  |  1989-05-05  |  3.7 KB  |  136 lines

  1. MODULE CmpPart;
  2. (*$E MOS *)
  3.  
  4. (*
  5.  * Vergleicht zwei Partitions
  6.  *)
  7.  
  8. FROM SYSTEM IMPORT ADR;
  9.  
  10. FROM SysUtil0 IMPORT VarEqual;
  11.  
  12. FROM BIOS IMPORT DriveMap, DriveSet, RWAbs, BPB, BPBPtr, RW, GetBPB;
  13.  
  14. IMPORT TOSIO;
  15. FROM InOut IMPORT WriteString, WriteCard, WriteLn, GotoXY, WritePg;
  16. IMPORT InOut;
  17.  
  18.  
  19. PROCEDURE drvno (c:CHAR): CARDINAL;
  20.   BEGIN
  21.     RETURN ORD (CAP (c)) - ORD ('A')
  22.   END drvno;
  23.  
  24. TYPE CharSet = SET OF CHAR;
  25.  
  26. VAR sd, dd: CHAR;
  27.     sn, dn: CARDINAL;
  28.     drives: DriveSet;
  29.     p: BPBPtr;
  30.     inf: ARRAY [0..31] OF BPB;
  31.     ch: CHAR;
  32.     l: LONGINT;
  33.     bufbls, blno, restbls, bls: CARDINAL;
  34.  
  35.     buf2, buf: ARRAY [1..32768] OF CARDINAL; (* 2 * 64KB *)
  36.  
  37.  
  38. PROCEDURE info (n: CARDINAL);
  39.   BEGIN
  40.     WriteString ('  Drive ');
  41.     WriteString (CHR (n + ORD ('A')));
  42.     WriteString (':');
  43.     WriteLn;
  44.     WriteString ('  Size: ');
  45.     IF inf[n].clsizb <> 1024 THEN HALT END;
  46.     WriteCard (inf [n].numcl,0);
  47.     WriteString (' KB');
  48.     WriteLn;
  49.   END info;
  50.  
  51.  
  52. BEGIN
  53.   drives:= DriveMap ();
  54.   WriteLn;
  55.   WriteString ('Compare partitions');
  56.   WriteLn;
  57.   WriteLn;
  58.   
  59.   WriteString ('First drive  (C-P) ? ');
  60.   InOut.Read (sd); sd:= CAP (sd);
  61.   IF NOT ( sd IN CharSet {'C'..'P'} ) THEN RETURN END;
  62.   IF NOT ( drvno (sd) IN drives ) THEN RETURN END;
  63.   WriteLn;
  64.   
  65.   WriteString ('Second drive (C-P) ? ');
  66.   InOut.Read (dd); dd:= CAP (dd);
  67.   IF NOT ( dd IN CharSet {'C'..'P'} ) THEN RETURN END;
  68.   IF NOT ( drvno (dd) IN drives ) THEN RETURN END;
  69.   WriteLn;
  70.   
  71.   IF sd = dd THEN RETURN END;
  72.   sn:= drvno (sd);
  73.   dn:= drvno (dd);
  74.   
  75.   p:= GetBPB (sn);
  76.   IF p = NIL THEN WriteString ('Not online'); InOut.Read (ch); RETURN END;
  77.   inf[sn]:= p^;
  78.   
  79.   p:= GetBPB (dn);
  80.   IF p = NIL THEN WriteString ('Not online'); InOut.Read (ch); RETURN END;
  81.   inf[dn]:= p^;
  82.  
  83.   WriteLn;
  84.   WriteString ('First drive: ');
  85.   WriteLn;
  86.   info (sn);
  87.  
  88.   WriteLn;
  89.   WriteString ('Second drive: ');
  90.   WriteLn;
  91.   info (dn);
  92.  
  93.   WriteLn;
  94.   WriteString ('Compare (Y/N) ? ');
  95.   InOut.Read (ch);
  96.   IF CAP (ch) <> 'Y' THEN RETURN END;
  97.  
  98.   blno:= 0;
  99.   restbls:= inf[sn].numcl * inf[sn].clsiz;
  100.   bufbls:= SHORT (SIZE (buf) DIV 1024L) * inf[sn].clsiz; (* =128 *)
  101.   REPEAT
  102.     GotoXY (0, 17);
  103.     WriteString ('Block no. ');
  104.     WriteCard (blno,0);
  105.     WriteLn;
  106.     WriteString ('Compared: ');
  107.     WriteCard (blno DIV inf[sn].clsiz,4);
  108.     WriteString (' KB');
  109.     WriteLn;
  110.     WriteString ('Left    : ');
  111.     WriteCard (restbls DIV inf[sn].clsiz,4);
  112.     WriteString (' KB');
  113.     bls:= bufbls;
  114.     IF bls > restbls THEN bls:= restbls END;
  115.     l:= RWAbs (Read, ADR (buf), bls, blno, sn);
  116.     IF l # 0L THEN
  117.       WriteLn; WriteString ('Read error on source!'); InOut.Read (ch);
  118.       RETURN
  119.     END;
  120.     l:= RWAbs (Read, ADR (buf2), bls, blno, dn);
  121.     IF l # 0L THEN
  122.       WriteLn; WriteString ('Read error on destination!'); InOut.Read (ch);
  123.       RETURN
  124.     END;
  125.     IF NOT VarEqual (buf, buf2) THEN
  126.       WriteLn; WriteString ('Not equal!'); InOut.Read (ch);
  127.       RETURN
  128.     END;
  129.     INC (blno, bls);
  130.     DEC (restbls, bls)
  131.   UNTIL restbls = 0;
  132.  
  133. END CmpPart.
  134. ə
  135. (* $FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654$FFF38654Ç$000000DET.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$00000927$0000099B$00000AD7$00000BCA$0000001E$FFF29BCA$00000475$FFF38654$FFF38654$FFF38654$FFF38654$00000542$0000047F$00000749$00000791$000007DDÿÇÇ*)
  136.